Warning: mkdir(): No space left on device in /var/www/tg-me/post.php on line 37

Warning: file_put_contents(aCache/aDaily/post/beginprogrammer/--): Failed to open stream: No such file or directory in /var/www/tg-me/post.php on line 50
بدايه مبرمج | Telegram Webview: beginprogrammer/643 -
Telegram Group & Telegram Channel
بدايه مبرمج
Photo
SOLID Principles

خامس مبدأ(DIP) Dependency Inversion Principle

“ High level modules should not depend upon low level modules. Both should depend upon abstractions”

الـ High level classes يجب ألا تكون مُعتمدة على low level classes و يجب ان يكون بينهما وسيط وهو abstractions.

على سبيل المثال افترض عندك كلاس سوبر ماركت وعشان تملي السوبر ماركت بالأصناف لابد انه تستخدم كلاسات كُل صنف مثلاً كلاس خضروات وكلاس الفواكه وتستدعي دالة الإضافة.

Fruit f = new Fruit();
f.add();
Vegetable v = new Vegetable();
v.add();

ونفس الشيء في بقية الأصناف ..

هنا كلاس السوبر ماركت يُعتبر ( High level ) مُعتمد بشكل كُلي على كلاسات الأصناف ( low level )،بمعنى أي تغيرات في ( low level ) لابد ان تنعكس في ( High level ) طيب ايش المشكلة اللي ممكن تصير🙄!

تخيل لو كلاس الفواكه عدل في دالة إضافة فاكهة هنا انت مضطر ترجع تعدل في كلاس السوبر ماركت.

وبكذا خالفنا مبدأ Open Close واصبح كلاس السوبر ماركت مفتوح للتعديلات😵وايضاً مُعتمد على كلاسات أخرى أي خالفنا مبدأ DIP .

طيب والحل ،السوبرماركت ضروري نضيف لها اصناف🤔

الحل هو عمل وسيط عن طريقه تضيف الصنف اللي تحتاجه وبدون ما تعتمد على الغير 😉 .

لنفرض الوسيط هو Interface يكون بداخلها دالة الإضافة، ومن ثم نجعل كلاسات الـ low level تعمل Implement لهذا الوسيط .

بحيث يستطيع كلاس السوبر ماركت التعامل مع low level عن طريق الوسيط .

وبكذا طبقنا المبدأ واصبح كلاس السوبر ماركت منعزل تماماً عن التغيرات اللي ممكن تحدث في كلاسات Low Level أي جعلنا الكلاس مُغلق عن أي تعديلات وبنفس الوقت غير مُعتمد على أي كلاس، أيضاً قللنا من Coupling واقصد بالـ Coupling هو ترابط الكود .

ملاحظة : عند زيادة Coupling في الكود يصبح صعب التعديل عليه او تطويره لذلك تسعى SOLID إلى تقليل من Coupling وزيادة Cohesion.

أخيراً
هذه المبادئ يوجد بينهما علاقة بمعنى لو اخذت كُل منهم بشكل معزول عن الآخر وطبقته فسوف تحصل على فائدة ولكن ليست كبيرة.

تمنياتي لكم بالتوفيق 🙏



tg-me.com/beginprogrammer/643
Create:
Last Update:

SOLID Principles

خامس مبدأ(DIP) Dependency Inversion Principle

“ High level modules should not depend upon low level modules. Both should depend upon abstractions”

الـ High level classes يجب ألا تكون مُعتمدة على low level classes و يجب ان يكون بينهما وسيط وهو abstractions.

على سبيل المثال افترض عندك كلاس سوبر ماركت وعشان تملي السوبر ماركت بالأصناف لابد انه تستخدم كلاسات كُل صنف مثلاً كلاس خضروات وكلاس الفواكه وتستدعي دالة الإضافة.

Fruit f = new Fruit();
f.add();
Vegetable v = new Vegetable();
v.add();

ونفس الشيء في بقية الأصناف ..

هنا كلاس السوبر ماركت يُعتبر ( High level ) مُعتمد بشكل كُلي على كلاسات الأصناف ( low level )،بمعنى أي تغيرات في ( low level ) لابد ان تنعكس في ( High level ) طيب ايش المشكلة اللي ممكن تصير🙄!

تخيل لو كلاس الفواكه عدل في دالة إضافة فاكهة هنا انت مضطر ترجع تعدل في كلاس السوبر ماركت.

وبكذا خالفنا مبدأ Open Close واصبح كلاس السوبر ماركت مفتوح للتعديلات😵وايضاً مُعتمد على كلاسات أخرى أي خالفنا مبدأ DIP .

طيب والحل ،السوبرماركت ضروري نضيف لها اصناف🤔

الحل هو عمل وسيط عن طريقه تضيف الصنف اللي تحتاجه وبدون ما تعتمد على الغير 😉 .

لنفرض الوسيط هو Interface يكون بداخلها دالة الإضافة، ومن ثم نجعل كلاسات الـ low level تعمل Implement لهذا الوسيط .

بحيث يستطيع كلاس السوبر ماركت التعامل مع low level عن طريق الوسيط .

وبكذا طبقنا المبدأ واصبح كلاس السوبر ماركت منعزل تماماً عن التغيرات اللي ممكن تحدث في كلاسات Low Level أي جعلنا الكلاس مُغلق عن أي تعديلات وبنفس الوقت غير مُعتمد على أي كلاس، أيضاً قللنا من Coupling واقصد بالـ Coupling هو ترابط الكود .

ملاحظة : عند زيادة Coupling في الكود يصبح صعب التعديل عليه او تطويره لذلك تسعى SOLID إلى تقليل من Coupling وزيادة Cohesion.

أخيراً
هذه المبادئ يوجد بينهما علاقة بمعنى لو اخذت كُل منهم بشكل معزول عن الآخر وطبقته فسوف تحصل على فائدة ولكن ليست كبيرة.

تمنياتي لكم بالتوفيق 🙏

BY بدايه مبرمج




Share with your friend now:
tg-me.com/beginprogrammer/643

View MORE
Open in Telegram


بدايه مبرمج Telegram | DID YOU KNOW?

Date: |

Telegram Be The Next Best SPAC

I have no inside knowledge of a potential stock listing of the popular anti-Whatsapp messaging app, Telegram. But I know this much, judging by most people I talk to, especially crypto investors, if Telegram ever went public, people would gobble it up. I know I would. I’m waiting for it. So is Sergei Sergienko, who claims he owns $800,000 of Telegram’s pre-initial coin offering (ICO) tokens. “If Telegram does a SPAC IPO, there would be demand for this issue. It would probably outstrip the interest we saw during the ICO. Why? Because as of right now Telegram looks like a liberal application that can accept anyone - right after WhatsApp and others have turn on the censorship,” he says.

What is Telegram Possible Future Strategies?

Cryptoassets enthusiasts use this application for their trade activities, and they may make donations for this cause.If somehow Telegram do run out of money to sustain themselves they will probably introduce some features that will not hinder the rudimentary principle of Telegram but provide users with enhanced and enriched experience. This could be similar to features where characters can be customized in a game which directly do not affect the in-game strategies but add to the experience.

بدايه مبرمج from us


Telegram بدايه مبرمج
FROM USA